<?php
/**
*Clase que manipula los servicios
*
*Esta clase agrega, modifica servicios.
*articulo.
*
*@author pegudo
*@package controller
*/
Class ServiciosController extends AppController { 
/**
*nombre de la clase
*@var string
*/
var $name = 'Servicios';

/**
*Funcion index.
*
*Se ejecuta si ninguna funcion es llamada.
*@return
*@param
*/
	function index () 
	{
		//seta el submenu
		//$this->setearSubMenu();
		$this->set('servicios', array ('ingreso'=>'Ingreso','egreso'=>'Egreso'));
		//$this->set('test',$this->Servicio->findAll());
	}

/**
*Funcion que lista los servicios.
*
*Esta funcion lista los servicios y ofrece un link para modificarlos, eliminarlos.
*@return
*@param
*@deprecated
*/
	function in2ex()
	{
			$this->set('servicios',$this->Servicio->findAll());
	}

/**
*Funcion que devuelve una lista de los articulos 
*
*Devuelve una lista de articulos que empiezan con la letra pasada por parametro.
*
*@return array
*@param string $primeraParte primera parte del nombre de un articulo
*/
	function listar($primeraParte=null)
	{	

		$nomfiltro = "nombre LIKE '$primeraParte%'";
		return($this->Servicio->find($nomfiltro));
	} 
	
/**
*Funcion que devuelve una lista de los articulos llamando a listar
*
*Setea una variable servicios que es una lista de articulos que empiezan con la letra pasada por parametro.
*
*@return array
*@param string $primeraParte primera parte del nombre de un articulo
*@deprecated
*/
	function listar_servicios($primeraParte=null)
	{

		$this->set('servicios',$this->listar($primeraParte));
	}

/**
*Funcion que devuelve una lista de los articulos brindados.
*
*Devuelve una lista de los articulos brindados cuyos nombres comienzan con un string 
*pasado por parametro.
*
*@return
*@param string $primeraParte es la primera parte del nombre del servicio
*/
	function seleccionarServiciosBrindados($primeraParte=null) 
	{
		$serviciosBrindados = array();
		$condicion = array ("nombre" => "LIKE $primeraParte%");
		$resultado = $this->Servicio->findAll($condicion,null,null,null,1,1);
		//pr($resultado);
		foreach ($resultado as $id_servicio => $servicio) 
		{
			if (!empty($servicio['Serviciobrindado'])) 
			{
				$idsrv = $servicio['Servicio']['id'];
				$serviciosBrindados ["$idsrv"] =  $servicio['Servicio']['nombre'] ;
			}
		}
	// 	pr($serviciosBrindados);
		return $serviciosBrindados;
	}

/**
*Funcion que devuelve una lista de los articulos obtenidos.
*
*Devuelve una lista de los articulos obtenidos cuyos nombres comienzan con un string 
*pasado por parametro.
*
*@return
*@param string $primeraParte es la primera parte del nombre del servicio
*/
	function seleccionarServiciosObtenidos($primeraParte=null) 
	{
		$serviciosObtenidos = array();
		$condicion = array ("nombre" => "LIKE $primeraParte%");
		$resultado = $this->Servicio->findAll($condicion,null,null,null,1,1);
		foreach ($resultado as $id_servicio => $servicio) 
		{
			if (!empty($servicio['Servicioobtenido'])) 
			{
				$idsrv = $servicio['Servicio']['id'];
				$serviciosObtenidos ["$idsrv"] =  $servicio['Servicio']['nombre'] ;
			}
		}
		return $serviciosObtenidos;
	}

/**
*Funcion que devuelve el precio de un servicio brindado.
*
*@return float precio sugerido del servicio brindado
@param integer $idServicio es el id del servicio del cual se necesita saber el precio
*/
	function obtenerPrecioServicioBrindado($idServicio=null) 
	{
		if ($idServicio!=null) 
		{
			return ($this->requestAction('serviciobrindados/obtenerPrecioServicio'.$idServicio));
		}
	}

/**
*Funcion que agrega un servicio.
*
*Depende exclusivamente de los formularios (vista) add_brindado y add_obtenido
*Si los formularios no estan vacios se validan los campos y si estos estan correctos dichas funciones llaman a agregar un servicio
*@return
*@param
*/
	function add() 
	{
		//setea la variables de errores y status
		$this->setearVariables();
		//Si los campos no estan vacios
		if(!empty($this->data))
		{
			
			if(!$this->Servicio->save($this->data))//si no lo consigue setea un error
				$this->set('status', 'Existen errores con Servicio');
		}
	}
	
	/**
	*Esta funcion agrega un servicio y llama a crear servicio brindado o adquirido.
	*
	*Esta funcion sirve para cuando se necesita agregar un servicio desde otra clase.
	*@return integer
	*@param string $name el nombre del servicio a agregar
	*/
	function addServicio($name,$type=null,$var=null) 
	{
		//setea la variables de errores y status
		$this->data['Servicio']['nombre'] = $name;
		//se agrega el servicio
		if(!empty($this->data))
		{
			if(!$this->Servicio->save($this->data))//si no lo consigue setea un error
				$this->set('status', 'Existen errores con Servicio');
			else
				return $this->Servicio->getLastInsertID();
		}
	}

/**
*Funcion que agrega la relacion servicio-servicio_brindado
*
*Depende exclusivamente del formulario (vista) addBrindados
*Si el formulario no esta vacio se validan los campos, 
*si no existen errores se almacenan los datos.
*@return
*@param
*/
	function addBrindado() 
	{
		$this->setearSubMenuBrindado();
		//setea la variables de errores y status
		$this->setearVariables();
		
		//Si los campos no estan vacios intenta guardar
		if(!empty($this->data))
		{
			//validamos para ver si esta todo bien
			$this->Servicio->data = $this->data;
			if( ($this->Servicio->validates()) && ($this->requestAction('serviciobrindados/validarCampos')) )
			{	//aqui es donde se agregan los servicios
				$this->Servicio->save($this->data);
				$idServicio = $this->Servicio->getLastInsertId();
				$porUnicaVez = $this->data['Serviciobrindado']['por_unica_vez'];
				$this->requestAction("serviciobrindados/add/$idServicio/null/$porUnicaVez/");
				$this->set('status','El servicio ha sido almacenado correctamente.');
			}
			else
				$this->set('status','Ocurrio un ERROR al intentar guardar el servicio.');
		}
	}

/**
*Funcion que agrega la relacion servicio-servicio_obtenido
*
*Depende exclusivamente del formulario (vista) addObtenidos
*Si el formulario no esta vacio se validan los campos, 
*si no existen errores se almacenan los datos.
*@return
*@param
*/
	function addObtenido() 
	{
		$this->setearSubMenuObtenido();	
		$this->requestAction('servicioobtenidos/setearSubMenu');		
		//setea la variables de errores y status
		$this->setearVariables();
		
		//Si los campos no estan vacios intenta guardar
		if(!empty($this->data))
		{
			//validamos para ver si esta todo bien
			$this->Servicio->data = $this->data;
			if( ($this->Servicio->validates()) && ($this->requestAction('servicioobtenidos/validarCampos')) )
			{
				$this->Servicio->save($this->data);
				$idServicio = $this->Servicio->getLastInsertId();
				if (!empty($idServicio)) {
					$this->requestAction("servicioobtenidos/add/$idServicio/");
					$this->set('status','El servicio ha sido almacenado correctamente.');
					
				}
				else {
					$this->set('status','Ocurrio un ERROR al intentar guardar el servicio.');
				}
			}
			else 
				$this->set('status','Ocurrio un ERROR al intentar guardar el servicio.');
		}
	}

	function listarModifyBrindado()
	{
		//setea los servicios
		$this->setearSubMenuBrindado();
		$servicios=$this->requestAction('serviciobrindados/listarServicios');
		$this->set('servicios',$servicios);
	}
	
	function listarModifyObtenido()
	{
		//setea los servicios
		$this->setearSubMenuObtenido();
		$servicios=$this->requestAction('servicioobtenidos/listarServicios');
		$this->set('servicios',$servicios);
	}

	

/**
*Funcion que modifica un servicio Obtenido
*
*Debe ser un servicio obtenido ya que si es un servicio brindado el data sera vacio.
*@return
*@param integer $idServicio id del servicio obtenido a modificar
*/
	function modifyObtenido($idServicio=null)
	{
		//seta el submenu
		$this->setearSubMenuObtenido();

		//setea la variables de errores y status
		$this->setearVariables();
		
		//si el modify da un error el parametro idServicio 
		//se pierde entonces se lo extrae de la vista.
		if($idServicio==null)
			$idServicio = $this->data['Servicio']['id'];	
		
		//SETEA LOS CAMPOS
		if (empty($this->data['Servicioobtenido']))  
		{ 
			//encuentra el servicio con el id $idServicio
			$condicion = array ('id' => $idServicio);
			$this->data = $this->Servicio->find($condicion,null,null,1);
			//identifica el servicio brindado
			$servicioObtenido = $this->data['Servicioobtenido']['0'];
			if(!empty($servicioObtenido))//si existe significa q es un serv brindado
			{
				if(empty($servicioObtenido['vencimiento']))
				{
					$servicioObtenido['vencimiento']=null;
				}
				else
				{
					$servicioObtenido['vencimiento']=$this->convertDmyToYmd($servicioObtenido['vencimiento']);
				}

				$this->data['Servicioobtenido'] = $servicioObtenido;
			}
			else
				$this->data = ''; //sino no setea el data
		}
		else//GUARDA LOS DATOS DE LOS CAMPOS
		{	
			//validamos para ver si esta todo bien
			$this->Servicio->data = $this->data['Servicio'];
			if( ($this->Servicio->validates()) &&
				($this->requestAction('servicioobtenidos/validarCampos')) )
			{
				//se modifica el servicio y el servicio brindado
				$this->Servicio->save($this->data);
				$this->requestAction("servicioobtenidos/modify");
				$this->set('status','El servicio ha sido almacenado correctamente.');
			}
			else//error
				$this->set('status','Ocurrio un ERROR al intentar guardar el servicio.');
		}
	}

/**
*Funcion que modifica un servicio Brindado
*
*Debe ser un servicio brindado ya que si es un servicio obtenido el data sera vacio.
*@return
*@param integer $idServicio id del servicio obtenido a modificar
*/
	function modifyBrindado($idServicio=null)
	{
		//seta el submenu
		$this->setearSubMenuBrindado();

		//setea la variables de errores y status
		$this->setearVariables();
		
		//si el modify da un error el parametro idServicio 
		//se pierdo entonces se lo extrae de la vista.
		if($idServicio==null)
			$idServicio = $this->data['Servicio']['id'];	
		
		//SETEA LOS CAMPOS
		if (empty($this->data['Serviciobrindado']))  
		{ 
			//encuentra el servicio con el id $idServicio
			$condicion = array ('id' => $idServicio);
			$this->data = $this->Servicio->find($condicion,null,null,1);
			//identifica el servicio brindado
			$servicioBrindado = $this->data['Serviciobrindado']['0'];
			if(!empty($servicioBrindado))//si existe significa q es un serv brindado
			{
				$this->data['Serviciobrindado'] = $servicioBrindado;
			}
			else
			{
				$this->data = ''; //sino no setea el data
			}
		}
		else//GUARDA LOS DATOS DE LOS CAMPOS
		{	
			//validamos para ver si esta todo bien
			$this->Servicio->data = $this->data['Servicio'];
			if( 
				($this->Servicio->validates()) &&
				($this->requestAction('serviciobrindados/validarCampos')) 
				)
			{
				//se guarda el servicio y el servicio brindado
				$this->Servicio->save($this->data);
				$this->requestAction("serviciobrindados/modify");
				$this->set('status','El servicio ha sido almacenado correctamente.');
			}
			else//redirecciona al index 
				$this->set('status','Ocurrio un ERROR al intentar guardar el servicio.');
		}
	}	

/**
*Funcion que genera un arreglo con los posibles errores.
*
*Los errores son seteados para mostrarlos en caso de que estos ocurran.
*
*@return
*@param
*/	
	function setearVariables()
	{
		//Mensaje de status q se muestra arriba de los datos.
		$this->set('statusServicio', 'Ingrese los datos del Servicio');	
		$error = array 
		(
			'Servicio/nombre'=> 'Formato del nombre incorrecto.',
			'Servicio/precio_sugerido'=>'Formato del precio incorrecto.',
			'Serviciobrindado/precio_sugerido'=>'Formato del precio incorrecto.',
			'Servicioobtenido/vencimiento' => 'El formato de la fecha no es correcto.'
		);
	
		$this->set('error',$error);
	}
	
// 	function getLastInserted()
// 	{
// 		return($this->Servicio->getLastInsert());
// 	}

/*	function setearSubMenu(){
		$aSubMenu[0]['title'] = 'Ingreso';
		$aSubMenu[0]['href']	 = PATH . 'serviciobrindados';
		$aSubMenu[0]['image']	 = '';
		
		$aSubMenu[1]['title'] = 'Egreso';
		$aSubMenu[1]['href']	 = PATH . 'Servicioobtenidos';
		$aSubMenu[1]['image']	 = '';
		
		$this->set('aSubMenu', $aSubMenu);
	}
*/	
	function setearSubMenuObtenido(){
		$aSubMenu[0]['title'] = 'Agregar';
		$aSubMenu[0]['href']	 = PATH . 'servicios/addObtenido';
		$aSubMenu[0]['image']	 = '';
		
		$aSubMenu[1]['title'] = 'Modificar';
		$aSubMenu[1]['href']	 = PATH . 'servicios/listarModifyObtenido';
		$aSubMenu[1]['image']	 = '';

		$aSubMenu[2]['title'] = 'Listar';
		$aSubMenu[2]['href']	 = PATH . 'servicioobtenidos';
		$aSubMenu[2]['image']	 = '';

/*		$aSubMenu[3]['title'] = 'Servicios';
		$aSubMenu[3]['href']	 = PATH . 'servicios';
		$aSubMenu[3]['image']	 = '';
*/		
		$this->set('aSubMenu', $aSubMenu);
	
	}


	function setearSubMenuBrindado(){
		$aSubMenu[0]['title'] = 'Agregar';
		$aSubMenu[0]['href']	 = PATH . 'servicios/addBrindado';
		$aSubMenu[0]['image']	 = '';
		
		$aSubMenu[1]['title'] = 'Modificar';
		$aSubMenu[1]['href']	 = PATH . 'servicios/listarModifyBrindado';
		$aSubMenu[1]['image']	 = '';
		
		$aSubMenu[2]['title'] = 'Listar';
		$aSubMenu[2]['href']	 = PATH . 'serviciobrindados';
		$aSubMenu[2]['image']	 = '';

/*		
		$aSubMenu[3]['title'] = 'Servicios';
		$aSubMenu[3]['href']	 = PATH . 'servicios';
		$aSubMenu[3]['image']	 = '';
*/

		$this->set('aSubMenu', $aSubMenu);
	
	}

}
?>